//导入所需要的包
import org.apache.spark.SparkContext  
import org.apache.spark.SparkContext._  
import org.apache.spark.SparkConf  
import org.apache.spark.HashPartitioner  
  
// 定义一个RemDup的对象，包含主函数main  
object RemDup {  
  
    def main(args: Array[String]) {  
        // 创建Spark配置程序的对象  
        val conf = new SparkConf().setAppName("RemDup")  
  
        // 创建SparkContext对象
        val sc = new SparkContext(conf)  
  
        // 指定数据路径  
        val dataFile = "file:E:\study\大数据实时计算\作业\hw7\RDD-data1.txt"  
  
        // 读取文本文件，并设置并行度为2  
        val data = sc.textFile(dataFile, 2)  
  
        // 过滤空行，将每一行转换为一个键值对，其中键是去掉前后空格的行内容，值是空字符串  
        // 然后根据HashPartitioner将数据分区到1个分区中  
        // 接着使用groupByKey将相同的键（即相同的行内容）组合在一起  
        // 最后使用sortByKey对结果进行排序，并只取键（即去重后的行内容）  
        val res = data.filter(_.trim().length > 0)  
          .map(line => (line.trim, ""))  
          .partitionBy(new HashPartitioner(1))  
          .groupByKey()  
          .sortByKey()  
          .keys  
  
        // 将结果保存为文件名为result  
        res.saveAsTextFile("result")  
  
        // 停止SparkContext  
        sc.stop()  
    }  
  
}